#include "osdep.h"
#include "utils.h"
#include <stdarg.h>

// 简单的文件操作封装
int qemu_open(const char *filename, int flags, ...) {
    int mode = 0;

    // 处理 mode 参数
    if (flags & O_CREAT) {
        va_list ap;
        va_start(ap, flags);
        mode = va_arg(ap, int);
        va_end(ap);
    }

    return open(filename, flags | O_BINARY, mode);
}

int qemu_close(int fd) {
    return close(fd);
}

ssize_t qemu_read(int fd, void *buf, size_t count) {
    return read(fd, buf, count);
}

ssize_t qemu_write(int fd, const void *buf, size_t count) {
    return write(fd, buf, count);
}

off_t qemu_lseek(int fd, off_t offset, int whence) {
    return lseek(fd, offset, whence);
}

int qemu_fstat(int fd, struct stat *buf) {
    return fstat(fd, buf);
}

int qemu_ftruncate(int fd, off_t length) {
    return ftruncate(fd, length);
}

// 内存对齐分配
void *qemu_memalign(size_t alignment, size_t size) {
    void *ptr;
    if (posix_memalign(&ptr, alignment, size) != 0) {
        return NULL;
    }
    return ptr;
}

void qemu_vfree(void *ptr) {
    free(ptr);
}